package orientacionObjetos;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class UsuarioDAOImpl implements IUsuarioDAO{

	 /**Creates table named Person with three columns (id, first_name, last_name)**/
    @Override
    public void createUserTable() {
        Connection connection = null;
        Statement statement = null;
 
        try {
            connection = conexionMYSQL.getConnection();
            statement = connection.createStatement();
            statement.execute("CREATE TABLE IF NOT EXISTS usuario (nom_usuario VARCHAR(16) NOT NULL," +
                    "nombre VARCHAR(55) NOT NULL, apellido VARCHAR(55) NOT NULL, email VARCHAR(55) NOT NULL, contrasenya VARCHAR(55) NOT NULL,PRIMARY KEY(nom_usuario));");
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
 
    @Override
    public void insert(Usuario usuario) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
 
        try {
            connection = conexionMYSQL.getConnection();
            //preparedStatement = connection.prepareStatement("INSERT INTO usuario (nom_usuario,nombre,apellido,email,contrasenya)" +
              //      "VALUES ('"+usuario.getUsuario()+"','"+usuario.getNombre()+"','"+usuario.getApellido()+"','"+usuario.getEmail()+"','"+usuario.getContrasenya()+"')");
            preparedStatement = connection.prepareStatement("INSERT INTO usuario (nom_usuario,nombre,apellido,email,contrasenya)" +
                    "VALUES (?,?,?,?,?)");
            preparedStatement.setString(1, usuario.getUsuario());
            preparedStatement.setString(2, usuario.getNombre());
            preparedStatement.setString(3, usuario.getApellido());
            preparedStatement.setString(4, usuario.getEmail());
            preparedStatement.setString(5, usuario.getContrasenya());
            preparedStatement.executeUpdate();
            System.out.println("INSERT INTO usuario (nom_usuario,nombre,apellido,email,contrasenya)" +
                    "VALUES ('"+usuario.getUsuario()+"','"+usuario.getNombre()+"','"+usuario.getApellido()+"','"+usuario.getEmail()+"','"+usuario.getContrasenya()+"')");
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
 
    @Override
    public Usuario selectById(String nomUsuario) {
        Usuario usuario = new Usuario();
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
 
        try {
            connection = conexionMYSQL.getConnection();
            preparedStatement = connection.prepareStatement("SELECT * FROM usuario WHERE nom_usuario ='"+nomUsuario+"'");
            preparedStatement.setString(1, nomUsuario);
            resultSet = preparedStatement.executeQuery();
 
            while (resultSet.next()) {
            	usuario.setUsuario(resultSet.getString("nom_usuario"));
            	usuario.setNombre(resultSet.getString("nombre"));
            	usuario.setApellido(resultSet.getString("apellido"));
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
 
        return usuario;
    }
 
    /**Returns all records from table as a List of person objects**/
    @Override
    public List<Usuario> selectAll() {
        List<Usuario> usuarios = new ArrayList<Usuario>();
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
 
        try {
            connection = conexionMYSQL.getConnection();
            statement = connection.createStatement();
            resultSet = statement.executeQuery("SELECT * FROM usuario");
 
            while (resultSet.next()) {
            	Usuario usuario = new Usuario();
            	usuario.setUsuario(resultSet.getString("nom_usuario"));
            	usuario.setNombre(resultSet.getString("nombre"));
            	usuario.setApellido(resultSet.getString("apellido")); 
                usuarios.add(usuario);
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
 
        return usuarios;
    }
 
    /**Deletes single record depending on "id" you provide**/
    @Override
    public void delete(Usuario usuario) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
 
        try {
            connection = conexionMYSQL.getConnection();
            preparedStatement = connection.prepareStatement("DELETE FROM usuario WHERE nom_usuario ='"+usuario.getUsuario()+"'");
            preparedStatement.setString(1, usuario.getUsuario());
            preparedStatement.executeUpdate();
 
            System.out.println("DELETE FROM usuario WHERE nom_usuario ='"+usuario.getUsuario()+"'");
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
 
    /**Updates a specific record depending on "id"
     * after you pass new Person object with new values**/
    @Override
    public void update(Usuario usuario,String nomUsuario) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
 
        try {
            connection = conexionMYSQL.getConnection();
            preparedStatement = connection.prepareStatement("UPDATE usuario SET " +
                    "nom_usuario='"+usuario.getUsuario()+"',nombre='"+usuario.getNombre()+"',apellido='"+usuario.getApellido()+"',email='"+usuario.getEmail()+"',contrasenya='"+usuario.getContrasenya()+"' WHERE nom_usuario = '"+nomUsuario+"'");
 
            preparedStatement.setString(1, nomUsuario);
            preparedStatement.setString(2, usuario.getNombre());
            preparedStatement.setString(3, usuario.getApellido());
            preparedStatement.setString(4, usuario.getEmail());
            preparedStatement.setString(5, usuario.getContrasenya());
            preparedStatement.executeUpdate();
 
            System.out.println("UPDATE usuario SET " +
                    "nom_usuario='"+usuario.getUsuario()+"',nombre='"+usuario.getNombre()+"',apellido='"+usuario.getApellido()+"',email='"+usuario.getEmail()+"',contrasenya='"+usuario.getContrasenya()+"' WHERE nom_usuario = '"+nomUsuario+"'");
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
